home *** CD-ROM | disk | FTP | other *** search
- { Included File: SCORE.INC }
-
- function score(hand: handtype):integer;
- const jack = 11;
- var
- index: 1..5;
- return: integer;
- cardmax: 4..5;
-
- function fifteen(hand: handtype):integer;
- var
- ways: integer;
- i,j,k: 1..dealsize;
- sum: integer;
- begin
- sum:=0;
- for i:=1 to cardmax do
- begin
- if hand[i].rank>10 then hand[i].rank:=10;
- sum:=sum+hand[i].rank
- end;
- ways:=0;
- if sum=15 then ways:=1;
- for i:=1 to cardmax do
- begin
- with hand[i] do
- begin
- if (sum-rank) <= 15 then
- begin
- if (sum-rank) = 15 then ways:=ways+1
- end
- else
- for j:=i+1 to cardmax do { ????????????? }
- begin
- if (sum-rank-hand[j].rank)<=15 then
- begin
- if (sum-rank-hand[j].rank)=15 then
- ways:=ways+1
- end
- else
- for k:=j+1 to cardmax do
- if (sum-rank-hand[j].rank-hand[k].rank)=15 then
- ways:=ways+1
- end
- end {with}
- end;
- fifteen:=ways*2
- end; {fifteen}
-
- function run(hand: handtype):integer;
- var
- mult: integer;
- matched: 0..5;
- i: 1..dealsize;
- return: integer;
- seen: boolean;
- begin
- mult:=1;
- matched:=0;
- return:=0;
- seen:=false;
- for i:=1 to (cardmax-1) do
- begin
- if hand[i].rank=hand[i+1].rank then
- begin
- if seen then mult:=mult+1
- else mult:=mult+2;
- seen:=true;
- if i=(cardmax-1) then
- begin
- if mult>=2 then mult:=mult-1;
- if matched>=2 then
- return:=return+((matched+1)*mult);
- matched:=0
- end
- end
- else
- begin
- seen:=false;
- if hand[i].rank=(hand[i+1].rank-1) then
- matched:=matched+1
- else
- begin
- if mult>=2 then mult:=mult-1;
- if matched>=2 then
- return:=return+((matched+1)*mult);
- mult:=1;
- matched:=0
- end
- end
- end;
- if mult>=2 then mult:=mult-1;
- if matched>=2 then
- return:=return+((matched+1)*mult);
- run:=return
- end; {run}
-
- function pair(hand: handtype):integer;
- var
- return: integer;
- matched: 0..4;
- index: 1..dealsize;
- begin
- return:=0;
- matched:=0;
- for index:=1 to (cardmax-1) do
- begin
- if hand[index].rank=hand[index+1].rank then
- matched:=matched+1;
- if (hand[index].rank<>hand[index+1].rank) or
- (index=cardmax-1) then
- begin
- case matched of
- 0: ;
- 1: return:=return+2;
- 2: return:=return+6;
- 3: return:=return+12
- end; {case}
- matched:=0 { ??? }
- end
- end;
- pair:=return
- end; {pair}
-
- function flush(hand: handtype):integer;
- var
- return: integer;
- index: 1..dealsize;
- begin
- return:=1;
- for index:=1 to 3 do
- if hand[index].suit=hand[index+1].suit then
- return:=return+1;
- if return=4 then
- begin
- if common.rank<>0 then
- if common.suit=hand[4].suit then return:=5;
- flush:=return
- end
- else flush:=0
- end; {flush}
-
- BEGIN {score}
- return:=0;
- cardmax:=4;
- return:=return + flush(hand);
- if common.rank<>0 then
- begin
- cardmax:=5;
- for index := 1 to playsize do
- if hand[index].rank = jack then
- if hand[index].suit = common.suit then
- return:=return+1; {GLITCH IN THE BOOK???}
- hand[5]:=common;
- sort(5,hand)
- end
- else
- begin
- hand[5].rank:=0
- end;
- return:= fifteen(hand)+return;
- return:= pair(hand)+return;
- return:= run(hand)+return;
- score:=return
- END; {score}